#!/bin/bash
# ==============================
# 脚本功能：清除 Maven 本地仓库的 *.lastUpdated、error/、unknown/ 等文件(夹)
# 开发作者：Allen
# 依赖命令：find | xrgs | xpath
# ==============================

# ========== 预定义变量 ========== # 定义一些全局变量或配置

# ========== 脚本预处理 ========== # 处理一些前期行为

# ========== 预定义函数 ========== # 定义一些功能函数
# 打印日志
log () {
    # type: debug info warn error
    local readonly type=$1; local readonly line=$2; local readonly msg=$3
    
    # type 大写处理
    local readonly TYPE=$(echo $type | awk '{print toupper($0)}')
    echo "[$TYPE] $msg <$line>" >&2
    return 0
}
# 清除所有无效文件
clear_invalid_file () {
    local maven_repo=$1
    
    # 本地仓库检查
    if [ ! -d $maven_repo ]; then log error $LINENO "配置的Maven仓库不存在: $maven_repo"; exit 3; fi
    # 清除 Maven 仓库的 *.lastUpdated 文件
    find $maven_repo -type f -name "*.lastUpdated" | xargs rm -rf
    # 清除 Maven 仓库的 _remote.repositories 文件
    find $maven_repo -type f -name "_remote.repositories" | xargs rm -rf
    # 清除 Maven 仓库的 unknown 目录
    find $maven_repo -type d -name "unknown" | xargs rm -rf
    # 清除 Maven 仓库的 error 目录
    find $maven_repo -type d -name "error" | xargs rm -rf
}
# 获取Maven目录
# 需要配置 MAVEN_HOME 环境变量，或者 mvn 命令可用
get_maven_home () {
    local maven_home=$MAVEN_HOME
    if [ ! $maven_home ]
    then
        local mvn_path=$(which mvn)
        local maven_bin=$(dirname $mvn_path 2> /dev/null$)
        maven_home=$(dirname $mvn_bin 2> /dev/null)
    fi
    if [ ! $maven_home ]
    then
        log error $LINENO "Maven环境异常，请检查环境变量<MAVEN_HOME>是否配置，或者mvn命令是否可用"
        exit 1
    else
        echo $maven_home
    fi
}
# 获取Meven仓库目录
get_maven_repo () {
    local maven_home=$1
    local maven_settings="$maven_home/conf/settings.xml"

    if [ ! -f $maven_settings ]
    then
        log error $LINENO "Maven配置文件不存在: $maven_settings"
        exit 2
    fi

    local maven_repo=$(xpath $maven_settings '//settings/localRepository/text()' 2> /dev/null)
    echo $maven_repo
}

# ========== 主程序区 ==========
maven_home=$(get_maven_home)
maven_repo=$(get_maven_repo $maven_home)
clear_invalid_file $maven_repo
log info $LINENO "完成"
